import {BaseAddDTO, BaseListDTO, BaseUpdateDTO} from '@/types/baseInterface'
import {TipInfo} from "@/api/types/commonTypes";
import {
    TemplateDynamicFieldAddDTO,
    TemplateDynamicFieldListDTO
} from "@/api/template-dynamic-field/models";

/**
 * 模板添加
 */
export interface TemplateAddDTO extends BaseAddDTO {
    pid: string,
    name: string,
    content?: string,
    type: string,
    reminder?: string,//提示说明
    zip?: string,
    skip?: boolean,//是否跳过
    unfoldField?: string,//要展开的字段
    unfoldFieldAlias?: string,//字段展开后的别名
    dynamicFields?: TemplateDynamicFieldAddDTO[]
}

/**
 * 模板修改
 */
export interface TemplateUpdateDTO extends BaseUpdateDTO {
    pid?: string,
    name?: string,
    content?: string,
    type?: string,
    reminder?: string,
    zip?: string,
    skip?: string,//是否跳过
    unfoldField?: string,//要展开的字段
    unfoldFieldAlias?: string,//字段展开后的别名
    dynamicFields: TemplateDynamicFieldAddDTO[]
}

/**
 * 模板修改
 */
export interface TemplateUpdateContentDTO extends BaseUpdateDTO {
    content: string
}

/**
 * 模板列表
 */
export interface TemplateListDTO extends BaseListDTO {
    pid: string,
    name: string,
    content?: string,
    type: string,
    reminder?: string,
    zip?: string,
    skip?: string,//是否跳过
    unfoldField?: string,//要展开的字段
    unfoldFieldAlias?: string,//字段展开后的别名
    dynamicFields?: TemplateDynamicFieldListDTO[]
}

/**
 * 模板树
 */
export interface TemplateTreeDTO extends TemplateListDTO {
    children?: TemplateTreeDTO[]
}

/**
 * 系统工具提示内容
 */
export interface SysTool {
    title: TipInfo,
    tips: TipInfo[],
    children: SysTool[]
}

// 定义对象的接口
export interface Item {
    name: string;
    isSaved: boolean;
    title: string;
    content: string;
}

export function getModeByName(name: string): string {
    // 默认模式为txt
    let mode = 'txt'

    // 如果name为空或者不包含点（.），直接返回txt模式
    if (!name || !name.includes('.')) {
        return mode
    }

    // 获取文件扩展名
    const extension = name.substring(name.lastIndexOf('.') + 1).toLowerCase()

    // 扩展名到模式的映射
    const modeMapping: { [key: string]: string } = {
        js: 'javascript',
        json: 'javascript',
        css: 'css',
        html: 'text/html',
        htm: 'text/html',
        xml: 'text/html',
        apl: 'text/apl',
        sql: 'text/x-sql',
        yaml: 'text/x-yaml',
        yml: 'text/x-yaml',
        java: 'text/x-java',
        c: 'text/x-csrc',
        cpp: 'text/x-c++src',
        cc: 'text/x-c++src',
        cxx: 'text/x-c++src',
        py: 'text/x-python',
        go: 'text/x-go',
        php: 'text/x-php'
    }

    // 根据扩展名设置模式，若没有找到匹配项，则默认返回'.txt'
    mode = modeMapping[extension] || 'txt'

    return mode
}